import Mock from 'mockjs'
import { param2Obj } from '@/utils/param2Obj'

// 模拟AI模型列表
const aiModels = [
  { id: 'deepseek', name: 'DeepSeek', description: '强大的通用AI模型', capabilities: ['通用对话', '学术问答', '代码生成'] },
  { id: 'ppteditor', name: 'PPT Editor', description: '专注于演示文稿创建的AI', capabilities: ['PPT设计', '内容生成', '排版优化'] },
  { id: 'kimi', name: 'Kimi', description: '对话式AI助手', capabilities: ['日常对话', '学习辅导', '知识问答'] },
  { id: 'tongyiwx', name: '通义万象', description: '阿里巴巴多模态AI模型', capabilities: ['图文理解', '多模态生成', '知识图谱'] }
]

// 模拟AI回复内容
const aiResponses = {
  deepseek: {
    '如何提高学习效率？': '提高学习效率需要系统性方法：\n1. 制定明确的学习计划，设定SMART目标\n2. 采用番茄工作法（25分钟专注+5分钟休息）\n3. 使用主动学习策略，如费曼技巧、间隔重复\n4. 创建无干扰的学习环境\n5. 保持规律作息和适量运动\n6. 使用思维导图等工具组织知识结构\n7. 定期复习和自测',
    '推荐数学学习方法': '高效数学学习方法：\n1. 理解基础概念，而非死记公式\n2. 建立数学思维模型，寻找知识间联系\n3. 练习多样化题型，特别是应用题\n4. 分析错题并总结解题模式\n5. 寻找真实场景应用数学知识\n6. 使用可视化工具理解抽象概念\n7. 参与数学讨论，解释概念给他人\n8. 定期回顾和连接不同章节知识',
    '如何准备考试？': '科学备考策略：\n1. 提前4-6周开始系统复习\n2. 制作知识点清单，评估掌握程度\n3. 分析历年试题，找出重点和出题规律\n4. 使用记忆技巧巩固关键内容\n5. 模拟考试环境进行自测\n6. 组建学习小组讨论难点\n7. 保证充足睡眠和营养均衡\n8. 考前一天避免熬夜和新知识学习',
    '学习计划制定': '科学学习计划制定方法：\n1. 明确学习目标和期限\n2. 分解大目标为小任务\n3. 评估每项任务所需时间\n4. 根据个人能效曲线安排学习时间\n5. 预留缓冲时间处理意外情况\n6. 设置阶段性检查点评估进度\n7. 建立奖励机制增强动力\n8. 使用数字工具追踪完成情况\n9. 定期调整计划以优化效果'
  },
  ppteditor: {
    '如何提高学习效率？': '提高学习效率的视觉化方法：\n\n📊 创建视觉学习计划\n- 使用色彩编码区分优先级任务\n- 设计进度可视化图表\n\n⏱️ 时间块管理\n- 25分钟专注学习\n- 5分钟视觉休息\n\n🧠 知识可视化\n- 制作思维导图连接概念\n- 使用图表总结要点\n\n👁️ 学习环境优化\n- 减少视觉干扰\n- 创建灵感墙展示目标',
    '推荐数学学习方法': '数学学习的视觉化方法：\n\n📈 概念可视化\n- 将抽象概念转为图表\n- 用色彩区分不同数学属性\n\n🔄 多角度展示\n- 同一问题多种解法对比\n- 概念间关系图谱构建\n\n📝 视觉笔记法\n- 使用图形记忆数学公式\n- 创建流程图解题步骤\n\n🎯 进度追踪\n- 设计知识掌握热力图\n- 错题分类视觉库',
    '如何准备考试？': '考试准备的视觉化策略：\n\n📋 视觉复习计划\n- 创建倒计时日历\n- 知识点完成度图表\n\n🗂️ 内容组织\n- 制作考点思维导图\n- 重点难点色彩标记\n\n📊 模拟测试分析\n- 错题类型饼图\n- 得分趋势线图表\n\n🧘 状态管理\n- 视觉化放松技巧\n- 考前心理准备清单',
    '学习计划制定': '视觉化学习计划制定：\n\n🎯 目标可视化\n- 创建目标树状图\n- 设计成就里程碑图\n\n⏰ 时间分配\n- 制作每周时间块图表\n- 任务优先级矩阵\n\n📈 进度追踪\n- 设计完成度仪表盘\n- 学习曲线图表\n\n🏆 激励系统\n- 视觉化奖励机制\n- 成果展示墙'
  },
  kimi: {
    '如何提高学习效率？': '嗨！想提高学习效率是个超棒的目标！😊 这里有几个我觉得特别有用的小技巧：\n\n✨ 找到你的黄金学习时间，有些人早上头脑最清醒，有些人则是夜猫子\n✨ 尝试番茄工作法，25分钟专注学习，然后休息5分钟\n✨ 创建一个舒适但不会让你太放松的学习环境\n✨ 把大任务分解成小目标，完成一个就奖励自己一下\n✨ 尝试不同的学习方法，比如视觉笔记、录音复习或教别人\n\n最重要的是保持积极心态！学习本身就是一段美妙的旅程～有什么具体问题都可以问我哦！💫',
    '推荐数学学习方法': '数学学习小秘诀来啦！🔢✨\n\n我超喜欢的数学学习方法：\n\n🌟 理解概念比记公式重要多了！试着用自己的话解释每个概念\n🌟 多做练习题，但不是机械重复，而是理解每一步为什么\n🌟 遇到难题时，试着画图或用实物模型帮助理解\n🌟 和同学组成学习小组，教会别人是最好的学习\n🌟 使用数学学习App和游戏，让学习变得有趣\n🌟 建立错题本，定期复习，找出自己的弱点\n\n记住，数学就像搭积木，需要一步步来，不要急哦！有什么具体的数学问题都可以问我～😊',
    '如何准备考试？': '考试准备攻略来啦！📝✨\n\n考前复习这样做效果超棒：\n\n🎯 提前规划复习时间表，避免临时抱佛脚\n🎯 整理知识点小卡片，随时随地都能复习\n🎯 尝试"教别人"的方法检验自己是否真懂\n🎯 做往年试题，熟悉出题风格和考点\n🎯 组织或加入学习小组，互相提问和解答\n🎯 考前一周保证充足睡眠，比熬夜更重要\n🎯 考前放松心情，相信自己的准备\n\n记住，考试只是检验学习成果的一种方式，保持平常心最重要！加油，你一定行！💪😊',
    '学习计划制定': '来做个超赞的学习计划吧！📚✨\n\n制定学习计划小技巧：\n\n📌 设定具体、可衡量的小目标，比如"今天完成5道数学题"\n📌 了解自己的学习风格和高效时段，合理安排任务\n📌 使用时间块技术，给每个科目分配固定时间\n📌 计划中加入休息和娱乐时间，避免倦怠\n📌 使用学习计划App或手帐，让计划可视化\n📌 设立奖励机制，完成目标后犒劳自己\n📌 每周回顾和调整计划，保持灵活性\n\n最重要的是：制定适合自己的计划，而不是完美但做不到的计划！需要我帮你规划具体科目吗？😊'
  },
  tongyiwx: {
    '如何提高学习效率？': '【学习效率提升方法】\n\n■ 认知策略\n- 构建知识网络，建立新旧知识连接\n- 应用深度加工原理，主动提问和推理\n- 利用工作记忆特性，将信息分块处理\n\n■ 时间管理\n- 基于艾宾浩斯遗忘曲线设计复习计划\n- 使用番茄工作法：25分钟专注+5分钟休息\n- 任务分解与优先级矩阵管理\n\n■ 环境优化\n- 创建专注环境，消除多任务干扰\n- 应用环境依赖记忆原理固定学习场所\n- 控制数字设备使用时间\n\n■ 身心调节\n- 保持规律作息，优化睡眠质量\n- 适量有氧运动提升脑力表现\n- 正念冥想训练注意力集中能力',
    '推荐数学学习方法': '【数学学习系统方法】\n\n■ 概念构建\n- 从具象到抽象的理解路径\n- 多模态表征：公式、图形、应用场景结合\n- 构建数学概念间的逻辑关联网络\n\n■ 解题策略\n- 问题分解与模式识别训练\n- 多角度思考：代数、几何、图形多维转换\n- 逆向思维与结果验证习惯培养\n\n■ 学习工具\n- 动态数学软件辅助视觉化理解\n- 数学建模工具应用于实际问题\n- 智能题库进行针对性练习\n\n■ 元认知训练\n- 解题过程口头表述，强化思维路径\n- 错题分析系统：类型分类与解决方案库\n- 知识图谱构建，定期回顾与扩展',
    '如何准备考试？': '【科学备考系统】\n\n■ 备考规划\n- 基于艾宾浩斯记忆曲线的复习时间表\n- 知识点重要性与难度评估矩阵\n- 个人能力差距分析与针对性训练\n\n■ 内容组织\n- 知识树构建，明确概念间联系\n- 考点预测与重点难点分级系统\n- 错题库建立与定期复习机制\n\n■ 复习策略\n- 主动回忆训练强化长期记忆\n- 模拟测试与时间压力适应训练\n- 知识点教学转述，检验理解深度\n\n■ 状态调节\n- 考前睡眠质量优化方案\n- 认知负荷管理与注意力保护\n- 考试焦虑缓解技术与心理调适',
    '学习计划制定': '【学习计划科学制定法】\n\n■ 目标设定\n- SMART原则：具体、可衡量、可实现、相关、时限\n- 目标分解：长期目标、中期目标、短期目标层级结构\n- 学习成果可视化定义\n\n■ 时间分配\n- 基于认知科学的最佳学习时长设计\n- 科目难度与个人能力匹配的时间权重分配\n- 复习与新知识学习的黄金比例设置\n\n■ 执行保障\n- 环境干扰控制与专注力保护机制\n- 学习动力维持系统与奖励机制设计\n- 社会支持网络构建与责任伙伴制度\n\n■ 评估调整\n- 定期进度检查点设置\n- 学习效果量化评估体系\n- 计划迭代优化机制与应变策略'
  }
}

// 通用回复模板
const genericResponses = {
  deepseek: [
    '关于"{question}"，我建议从以下几个方面思考：\n1. 明确学习目标和关键概念\n2. 寻找权威学术资源和参考文献\n3. 系统学习并构建知识框架\n4. 通过实践应用巩固理解\n5. 定期复习和自我测试\n\n如需更具体的指导，请提供更多学习背景信息。',
    '"{question}"是个很好的问题。从学术角度，我推荐：\n1. 首先理解基础理论和核心概念\n2. 分析问题的多个维度和相关因素\n3. 参考最新研究成果和学术观点\n4. 批判性思考并形成自己的见解\n5. 将知识应用到实际情境中\n\n希望这些建议对你有所帮助。',
    '针对"{question}"，我建议采取系统化学习方法：\n1. 建立概念图理清知识结构\n2. 深入研究核心原理和机制\n3. 分析典型案例和应用场景\n4. 进行对比学习找出关键差异\n5. 通过教授他人检验理解深度\n\n这样可以帮助你全面掌握相关知识。'
  ],
  ppteditor: [
    '关于"{question}"，我可以从视觉呈现角度提供建议：\n\n📊 内容组织\n- 使用层级结构展示关键点\n- 应用色彩编码增强记忆\n\n🔍 重点突出\n- 创建视觉焦点引导注意\n- 使用图表可视化复杂概念\n\n🖼️ 设计应用\n- 选择合适图形表达关系\n- 保持视觉一致性增强理解',
    '"{question}"可以通过以下视觉化方法提高学习效果：\n\n📝 信息架构\n- 创建主题分支图解\n- 设计进度追踪视觉工具\n\n🎨 视觉元素\n- 使用图标简化复杂概念\n- 应用对比色强调重点\n\n📈 数据呈现\n- 选择适合的图表类型\n- 简化视觉噪音提高清晰度',
    '针对"{question}"，我推荐这些视觉化学习策略：\n\n🗺️ 知识地图\n- 绘制概念关系图\n- 创建学习路径可视化\n\n📊 内容展示\n- 使用信息图表整合知识点\n- 设计比较矩阵展示异同\n\n🎯 目标追踪\n- 创建可视化进度工具\n- 设计成就里程碑图表'
  ],
  kimi: [
    '关于"{question}"，我有几个超实用的小建议！😊\n\n✨ 先从整体了解，再深入细节\n✨ 尝试不同的学习方法，找到最适合你的\n✨ 把学到的知识教给别人，这样记得更牢\n✨ 定期小测验自己，检查掌握程度\n✨ 给自己设立小奖励，增加学习动力\n\n希望这些小技巧对你有帮助！有什么具体问题都可以继续问我哦～💫',
    '"{question}"是个好问题！我来分享几个我最喜欢的方法：\n\n🌟 把复杂内容拆解成小块，一次专注一小部分\n🌟 用生动的例子或故事联系抽象概念\n🌟 创建思维导图，连接不同知识点\n🌟 设定明确的学习目标，增加成就感\n🌟 找学习伙伴一起讨论，互相解答疑惑\n\n学习路上有我陪你，加油！💪😊',
    '关于"{question}"，试试这些有趣又有效的方法吧！\n\n💫 使用记忆宫殿技巧，把知识点和场景联系起来\n💫 录制自己讲解概念的小视频，回看检查理解\n💫 创建个性化的学习歌曲或口诀\n💫 用彩色笔记和图表让笔记更生动\n💫 设置学习倒计时，挑战自己的专注力\n\n记住，学习也可以很有趣！有什么不明白的随时问我哦～🌈'
  ],
  tongyiwx: [
    '【关于"{question}"的系统分析】\n\n■ 认知视角\n- 信息加工理论应用\n- 知识结构化与图式建立\n- 多通道学习原理应用\n\n■ 方法论\n- 系统思维模型构建\n- 目标分解与路径规划\n- 反馈循环与调整机制\n\n■ 工具应用\n- 数字化学习平台选择\n- 知识管理系统建立\n- 学习数据分析与应用',
    '【"{question}"的多维度解析】\n\n■ 理论基础\n- 认知负荷管理原理\n- 元认知监控与调节机制\n- 迁移学习模型应用\n\n■ 实践策略\n- 深度加工与浅层加工区分\n- 分布式练习时间安排\n- 提取练习与测试效应应用\n\n■ 资源整合\n- 学习材料质量评估标准\n- 多模态资源互补应用\n- 社群学习生态构建',
    '【针对"{question}"的系统方法】\n\n■ 认知优化\n- 注意力资源分配策略\n- 工作记忆容量扩展技术\n- 长期记忆编码强化方法\n\n■ 学习架构\n- 知识点关联网络构建\n- 概念层级结构梳理\n- 学科交叉融合模型\n\n■ 执行保障\n- 学习动机内外驱动平衡\n- 自我效能感提升机制\n- 持续学习习惯养成系统'
  ]
}

// 模拟对话历史
let conversationHistory = []

// 模拟文件上传响应
const fileResponses = {
  pdf: '我已分析完您上传的PDF文档。这是一份关于{topic}的资料，共{pages}页。主要内容包括：\n\n1. {point1}\n2. {point2}\n3. {point3}\n\n您想了解文档中的哪部分内容？或者需要我对文档进行摘要、提取关键信息或回答特定问题吗？',
  doc: '我已读取完您上传的Word文档。文档主题是{topic}，包含{sections}个部分。主要内容有：\n\n1. {point1}\n2. {point2}\n3. {point3}\n\n您需要我帮您总结文档内容，还是有特定问题需要解答？',
  txt: '我已处理完您上传的文本文件。文件内容主要关于{topic}，包含约{lines}行文本。主要要点：\n\n1. {point1}\n2. {point2}\n3. {point3}\n\n您希望我对这些内容做什么分析或解释？',
  ppt: '我已分析您上传的PPT演示文稿。这是一份关于{topic}的演示，共{slides}张幻灯片。主要内容包括：\n\n1. {point1}\n2. {point2}\n3. {point3}\n\n您需要我帮您提炼演示的核心内容，还是有其他问题？'
}

// 模拟文档主题
const documentTopics = [
  '高等数学基础概念', '物理学原理与应用', '计算机科学导论', 
  '文学作品分析方法', '经济学基本原理', '生物学研究进展',
  '历史事件与影响', '心理学研究方法', '化学反应机理',
  '艺术鉴赏与创作', '哲学思想探究', '环境科学与可持续发展'
]

// 模拟文档要点
const documentPoints = [
  '基本概念与定义', '理论框架与模型', '历史发展与演变',
  '关键原理与应用', '研究方法与工具', '案例分析与讨论',
  '实验设计与结果', '数据分析与解读', '前沿研究与趋势',
  '实践指导与建议', '常见问题与解答', '未来展望与挑战',
  '跨学科连接与启示', '理论与实践的结合', '学习方法与技巧'
]

export default {
  // 获取AI模型回复
  'post|/api/ai/chat': config => {
    const { model, question, messages } = JSON.parse(config.body)
    
    // 如果提供了对话历史，更新全局对话历史
    if (messages && messages.length > 0) {
      conversationHistory = [...messages]
    }
    
    // 检查是否有预设回答
    let response = ''
    const modelResponses = aiResponses[model] || aiResponses.deepseek
    
    // 检查是否有匹配的预设问题
    for (const key in modelResponses) {
      if (question && question.includes(key)) {
        response = modelResponses[key]
        break
      }
    }
    
    // 如果没有匹配的预设回答，使用通用回复
    if (!response) {
      const genericModelResponses = genericResponses[model] || genericResponses.deepseek
      const randomIndex = Math.floor(Math.random() * genericModelResponses.length)
      response = genericModelResponses[randomIndex].replace('{question}', question || '')
    }
    
    // 模拟API延迟
    return Mock.mock({
      code: 200,
      message: 'success',
      data: {
        content: response,
        model: model,
        timestamp: new Date().getTime()
      }
    })
  },
  
  // 获取可用的AI模型列表
  'get|/api/ai/models': () => {
    return {
      code: 200,
      message: 'success',
      data: aiModels
    }
  },
  
  // 获取AI模型的使用配额
  'get|/api/ai/quota': () => {
    return Mock.mock({
      code: 200,
      message: 'success',
      data: {
        total: 100,
        used: '@integer(10, 80)',
        remaining: '@integer(20, 90)',
        reset_date: '@date("yyyy-MM-dd")'
      }
    })
  },
  
  // 保存对话历史
  'post|/api/ai/conversation/save': config => {
    const { title, messages } = JSON.parse(config.body)
    
    return Mock.mock({
      code: 200,
      message: 'success',
      data: {
        id: '@id',
        title: title || '未命名对话',
        created_at: '@datetime',
        message_count: messages ? messages.length : 0
      }
    })
  },
  
  // 获取历史对话列表
  'get|/api/ai/conversation/list': config => {
    const { page = 1, limit = 10 } = param2Obj(config.url)
    
    const list = Mock.mock({
      'items|5-10': [{
        id: '@id',
        title: '@ctitle(5, 15)',
        created_at: '@datetime',
        message_count: '@integer(5, 30)',
        model: () => {
          const models = ['deepseek', 'ppteditor', 'kimi', 'tongyiwx']
          return models[Math.floor(Math.random() * models.length)]
        }
      }]
    })
    
    return {
      code: 200,
      message: 'success',
      data: {
        total: 28,
        items: list.items,
        page: Number(page),
        limit: Number(limit)
      }
    }
  },
  
  // 获取特定历史对话详情
  'get|/api/ai/conversation/\d+': config => {
    const url = config.url
    const id = url.match(/\/api\/ai\/conversation\/(\d+)/)[1]
    
    // 生成模拟对话
    const messages = []
    const messageCount = Mock.Random.integer(5, 15)
    const model = Mock.Random.pick(['deepseek', 'ppteditor', 'kimi', 'tongyiwx'])
    
    // 系统消息
    messages.push({
      role: 'system',
      content: `你现在是${model}模型，请根据你的专长回答用户问题。`,
      time: Mock.Random.datetime()
    })
    
    // 生成对话内容
    for (let i = 0; i < messageCount; i++) {
      // 用户消息
      messages.push({
        role: 'user',
        content: Mock.Random.sentence(5, 20),
        time: Mock.Random.datetime()
      })
      
      // AI回复
      messages.push({
        role: 'assistant',
        content: Mock.Random.paragraph(2, 5),
        time: Mock.Random.datetime()
      })
    }
    
    return {
      code: 200,
      message: 'success',
      data: {
        id,
        title: Mock.Random.ctitle(5, 15),
        created_at: Mock.Random.datetime(),
        updated_at: Mock.Random.datetime(),
        model,
        messages
      }
    }
  },
  
  // 处理文件上传
  'post|/api/ai/upload': config => {
    // 在实际场景中，这里会解析FormData，但在mock中我们模拟响应
    const fileType = getRandomFileType();
    const model = getModelFromRequest(config) || 'deepseek';
    
    // 根据不同模型生成不同风格的回复
    let response = generateFileResponse(fileType, model);
    
    // 模拟API延迟
    return Mock.mock({
      code: 200,
      message: 'success',
      data: {
        content: response,
        file_type: fileType,
        model: model,
        timestamp: new Date().getTime()
      }
    })
  }
}

// 辅助函数：从请求中获取模型信息
function getModelFromRequest(config) {
  // 在实际场景中会从FormData中提取，这里简化处理
  const body = config.body || '';
  const modelMatch = body.match(/model=([^&]+)/);
  return modelMatch ? modelMatch[1] : null;
}

// 辅助函数：随机获取文件类型
function getRandomFileType() {
  const types = ['pdf', 'doc', 'txt', 'ppt'];
  return types[Math.floor(Math.random() * types.length)];
}

// 辅助函数：根据文件类型和模型生成响应
function generateFileResponse(fileType, model) {
  // 随机生成文档信息
  const topic = documentTopics[Math.floor(Math.random() * documentTopics.length)];
  const point1 = documentPoints[Math.floor(Math.random() * documentPoints.length)];
  const point2 = documentPoints[Math.floor(Math.random() * documentPoints.length)];
  const point3 = documentPoints[Math.floor(Math.random() * documentPoints.length)];
  
  // 随机生成文档结构信息
  const pages = Math.floor(Math.random() * 30) + 5;
  const sections = Math.floor(Math.random() * 8) + 3;
  const lines = Math.floor(Math.random() * 200) + 50;
  const slides = Math.floor(Math.random() * 20) + 5;
  
  // 获取基本响应模板
  let response = fileResponses[fileType] || fileResponses.pdf;
  
  // 替换占位符
  response = response
    .replace('{topic}', topic)
    .replace('{pages}', pages)
    .replace('{sections}', sections)
    .replace('{lines}', lines)
    .replace('{slides}', slides)
    .replace('{point1}', point1)
    .replace('{point2}', point2)
    .replace('{point3}', point3);
  
  // 根据不同模型调整响应风格
  switch(model) {
    case 'ppteditor':
      return formatPPTEditorResponse(response, fileType);
    case 'kimi':
      return formatKimiResponse(response, fileType);
    case 'tongyiwx':
      return formatTongyiResponse(response, fileType);
    case 'deepseek':
    default:
      return response;
  }
}

// 格式化为PPT Editor风格的响应
function formatPPTEditorResponse(response, fileType) {
  // 添加视觉化的格式
  const fileIcons = {
    pdf: '📄',
    doc: '📝',
    txt: '📋',
    ppt: '📊'
  };
  
  const icon = fileIcons[fileType] || '📄';
  
  return `${icon} **文档分析结果**\n\n${response}\n\n📌 **可视化建议**\n- 可以将文档内容转换为思维导图\n- 关键数据可用图表展示\n- 考虑使用色彩编码突出重点内容`;
}

// 格式化为Kimi风格的响应
function formatKimiResponse(response, fileType) {
  // 添加更友好、活泼的语气
  return `嗨！我已经看完你的文件啦！😊\n\n${response}\n\n有什么想问的，尽管说哦！我可以帮你：\n✨ 总结文档重点\n✨ 解释难懂的概念\n✨ 回答相关问题\n\n让我知道怎么帮你吧～💫`;
}

// 格式化为通义万象风格的响应
function formatTongyiResponse(response, fileType) {
  // 添加更专业、结构化的格式
  return `【文档分析报告】\n\n■ 基本信息\n${response}\n\n■ 分析建议\n- 建议按知识结构化方法处理文档内容\n- 可进行多维度关联分析提取核心价值\n- 结合认知图谱构建完整知识体系`;
}